`
https://leetcode.cn/problems/coin-change-ii/
`

/**
 * @param {number} amount
 * @param {number[]} coins
 * @return {number}
 */
var change = function (amount, coins) {
  // dp[j] 表示凑出金额 j 的方法数
  const dp = new Array(amount + 1).fill(0);

  // 要凑出金额 0，也就是不用凑，所以 dp[0] = 1
  dp[0] = 1;

  for (const coin of coins) {
    for (let j = coin; j <= amount; j++) {
      // 当前金额大于等于当前硬币面值，可以选择使用当前硬币
      dp[j] += dp[j - coin];
    }
  }

  return dp[amount];
};
